ePaper (IL3820) module Library  v0.5
Library for the 2.9-inch WaveShare ePaper display module
il3820_reset.c
1 /*
2  * @file il3820_reset.c
3  *
4  * @author Matthew Matz & Roy Eltham
5  *
6  * @version 0.5
7  *
8  * @copyright Copyright (C) Parallax, Inc. 2018. See end of file for
9  * terms of use (MIT License).
10  *
11  * @brief Waveshare ePaper display bitmap driver, see il3820_h. for documentation.
12  *
13  * @detail Please submit bug reports, suggestions, and improvements to
14  * this code to editor@parallax.com.
15  */
16 
17 
18 #include "il3820.h"
19 
20 
24 const unsigned char lut_full_update[] = {
25  0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x22, 0x22, 0x66, 0x69,
26  0x69, 0x59, 0x58, 0x99, 0x99, 0x88, 0x00, 0x00, 0x00, 0x00,
27  0xF8, 0xB4, 0x13, 0x51, 0x35, 0x51, 0x51, 0x19, 0x01, 0x00
28 };
29 
30 // const unsigned char lut_partial_update[] = {
31 // 0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00, 0x00, 0x00,
32 // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
33 // 0x13, 0x14, 0x44, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
34 // };
35 
36 
37 
38 void il3820_resetDisplay(screen_t *dev)
39 {
40  int mask_cs = (1 << dev->dev_id);
41  int mask_sdi = (1 << dev->sdi_pin);
42  int mask_clk = (1 << dev->clk_pin);
43  int mask_dc = (1 << dev->dc_pin);
44 
45  il3820_writeLockSet(dev->dev_id);
46 
47  // reset
48  low(dev->rst_pin);
49  pause(200);
50  high(dev->rst_pin);
51  pause(200);
52 
53  // Initialization Sequence
54  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, IL3820_DRIVER_OUTPUT, 0);
55  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, (dev->height - 1) & 0xFF, 1);
56  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, ((dev->height - 1) >> 8) & 0xFF, 1);
57  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, 0x00, 1); // GD = 0; SM = 0; TB = 0;
58  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, IL3820_BOOSTER_SOFT_START, 0);
59  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, 0xD7, 1);
60  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, 0xD6, 1);
61  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, 0x9D, 1);
62  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, IL3820_WRITE_VCOM_REGISTER, 0);
63  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, 0xA8, 1); // VCOM 7C
64  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, IL3820_SET_DUMMY_LINE_PERIOD, 0);
65  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, 0x1A, 1); // 4 dummy lines per gate
66  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, IL3820_SET_GATE_TIME, 0);
67  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, 0x08, 1); // 2us per line
68  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, IL3820_DATA_ENTRY_MODE, 0);
69  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, 0x03, 1); // X increment; Y increment
70  il3820_spiWrite(mask_cs, mask_sdi, mask_clk, mask_dc, IL3820_WRITE_LUT_REGISTER, 0);
71  OUTA |= mask_dc;
72  il3820_spiWriteBytes(mask_cs, mask_sdi, mask_clk, lut_full_update, 30);
73 
74  il3820_writeLockClear(dev->dev_id);
75 
76  while (input(dev->status_pin) == 1) pause(2); //0: idle, 1: busy
77 }
78 
79